package cz.muni.fi.pa036.kiss.serviceimpl;

import cz.muni.fi.pa036.kiss.Entity.PokojAssembler;
import cz.muni.fi.pa036.kiss.Entity.PokojDTO;
import cz.muni.fi.pa036.kiss.Entity.VybaveniPokoje;
import cz.muni.fi.pa036.kiss.Entity.VybaveniPokojeAssembler;
import cz.muni.fi.pa036.kiss.Entity.VybaveniPokojeDTO;
import cz.muni.fi.pa036.kiss.dao.VybaveniPokojeDAO;
import cz.muni.fi.pa036.kiss.service.VybaveniPokojeService;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;

/**
 *
 * @author peter
 */
public class VybaveniPokojeServiceImpl implements VybaveniPokojeService{

    @Autowired
    private VybaveniPokojeDAO vybaveniDAO;
    @Autowired
    private VybaveniPokojeAssembler vybaveniassembler;
    @Autowired
    private PokojAssembler pokojassembler;
    
    @Transactional
    @Override
    public void createVybPok(VybaveniPokojeDTO vybaveni) {
        if (vybaveni == null) {
            throw new IllegalArgumentException("vybaveni is null");
        }
        
        if (vybaveni.getId() != null) {
            throw new IllegalArgumentException("vybaveni.id is not null");
        }
        VybaveniPokoje maj = vybaveniassembler.createEntityfromDTO(vybaveni);
        vybaveniDAO.createVybPok(maj);
        vybaveni.setId(maj.getId());
    }

    @Transactional(readOnly = true)
    @Override
    public VybaveniPokojeDTO getById(Long id) {
        if (id == null) {
            throw new IllegalArgumentException("vybaveni.Id is null");
        }
        
        VybaveniPokoje maj = vybaveniDAO.getById(id);
        if (maj == null) {
            return null;
        }        
        return vybaveniassembler.createDTOfromEntity(maj);
    }

    @Transactional
    @Override
    public void updateVybaveniPokoje(VybaveniPokojeDTO vybaveni) {
        if (vybaveni == null) {
            throw new IllegalArgumentException("vybaveni is null");
        }        
        if (vybaveni.getId() == null) {
            throw new IllegalArgumentException("vybaveni.id is null");
        }
        
        VybaveniPokoje maj = vybaveniassembler.createEntityfromDTO(vybaveni);
        vybaveniDAO.updateVybaveniPokoje(maj);
    }

    @Transactional
    @Override
    public void deleteVybaveniPokoje(VybaveniPokojeDTO vybaveni) {
        if (vybaveni == null) {
            throw new IllegalArgumentException("vybaveni is null");
        }        
        if (vybaveni.getId() == null) {
            throw new IllegalArgumentException("vybaveni.id is null");
        }
        
        VybaveniPokoje maj = vybaveniassembler.createEntityfromDTO(vybaveni);
        vybaveniDAO.deleteVybaveniPokoje(maj);
    }

    @Transactional(readOnly = true)
    @Override
    public List<VybaveniPokojeDTO> findAll() {
        List<VybaveniPokoje> result = vybaveniDAO.findAll();
        List<VybaveniPokojeDTO> dTOList = new ArrayList();
        
        for (VybaveniPokoje maj : result) {
            dTOList.add(vybaveniassembler.createDTOfromEntity(maj));
        }
        return dTOList;
    }

    @Transactional(readOnly = true)
    @Override
    public List<VybaveniPokojeDTO> findByPokojId(PokojDTO pokoj) {
        if (pokoj == null) {
            throw new IllegalArgumentException("pokoj is null");
        }
        List<VybaveniPokoje> result = vybaveniDAO.findByPokojId(pokojassembler.createEntityfromDTO(pokoj));
        List<VybaveniPokojeDTO> ret = new ArrayList();
        for (VybaveniPokoje bp : result) {
            ret.add(vybaveniassembler.createDTOfromEntity(bp));
        }
        return ret;
    }
    
}
